package com.game.sdk.pay;

import android.text.TextUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;

import com.game.sdk.YTAppService;
import com.game.sdk.domain.ParamJson;
import com.game.sdk.domain.ResultCode;
import com.game.sdk.init.NetCallBack;
import com.game.sdk.util.DataSafeUtil;
import com.game.sdk.util.DialogUtil;
import com.game.sdk.util.NetTask;
import com.game.sdk.util.Util;

public class PayUtil {
	/**
	 * 发起支付
	 * 
	 * @param serverId
	 *            玩家所在的服务器
	 * @param productname
	 *            产品名字
	 * @param productdesc
	 *            产品描述
	 * @param attach
	 *            拓展参数描述
	 * @param amount
	 *            交互金额
	 * @param role
	 *            角色id
	 * @param ipaddrid
	 *            所在地区的ip代号
	 * @param mem_id
	 *            相当于userid（username） 不过这个是在username（userid）基础上抽象出来的一个变量
	 * @param user_token
	 *            相当于pwd（token） 不过这个是在token（pwd）基础上抽象出来的一个变量
	 * @param callback
	 *            借口回调 类型是 NetCallBack
	 * @param ctx
	 *            上下文
	 * @return void(采取接口回调，一般会开线程，用接口回调处理异步)
	 */
	public static void pay(String mem_id, String user_token, String serverId,
			String productname, String productdesc, String attach,
			String amount, String role, String ipaddrid, final Context ctx,
			final NetCallBack callback) {
		String jasonStr = "";
		jasonStr = getPayParamsObjs(serverId, productname, productdesc, attach,
				amount, role, mem_id, ipaddrid, user_token).toString();
		new NetTask() {

			protected void onPostExecute(String result) {
				Util.netResponseCommHandler(1, result, callback);
			};
		}.execute(ctx, Constant.URL_PAY, jasonStr, true, true, true, true);
	}

	/**
	 * 支付的状态
	 * 
	 * @param serverId
	 * @param productname
	 * @param productdesc
	 * @param attach
	 * @param amount
	 * @param role
	 * @param mem_id
	 * @param ipaddrid
	 * @param user_token
	 * */
	private static Object getPayParamsObjs(String serverId, String productname,
			String productdesc, String attach, String amount, String role,
			String mem_id, String ipaddrid, String user_token) {
		ParamJson json = new ParamJson();
		json.setAppid(YTAppService.appid);

		json.setImei(YTAppService.dm.imeil);

		json.setFrom(ParamJson.ANDROID + "");// android 就用1

		json.setAgentgame(YTAppService.agentid);

		json.setDeviceinfo(YTAppService.dm.deviceinfo);

		json.setUserua(YTAppService.dm.userua);

		json.setServer(serverId);

		json.setProductname(productname);

		json.setProductdesc(productdesc);

		json.setAttach(attach);

		json.setAmount(amount);

		json.setRole(role);

		json.setUserid(mem_id);

		json.setUser_token(user_token);

		json.setCode(DataSafeUtil.code + "");

		json.setClient_id(YTAppService.clientId + "");

		String api_token = DataSafeUtil.getApiToken("pay",
				System.currentTimeMillis(), YTAppService.clientKey);
		json.setApi_token(api_token);

		json.setIpaddrid(ipaddrid);

		json.setParams_key(DataSafeUtil.getIdentifyKey(json.getParamsString(),
				YTAppService.clientKey));

		return json.buildParams();

	}

	/**
	 * 支付的状态
	 * 
	 * @param user_token
	 * @param orderid
	 * */
	private static Object getQueryParamsObjs(String user_token, String orderid) {
		ParamJson json = new ParamJson();
		json.setAppid(YTAppService.appid);

		json.setFrom(ParamJson.ANDROID + "");// android 就用1

		json.setDeviceinfo(YTAppService.dm.deviceinfo);

		json.setUserua(YTAppService.dm.userua);

		json.setUser_token(user_token);

		json.setCode(DataSafeUtil.code + "");

		json.setClient_id(YTAppService.clientId + "");

		String api_token = DataSafeUtil.getApiToken("queryOrder",
				System.currentTimeMillis(), YTAppService.clientKey);
		json.setApi_token(api_token);

		json.setOrderid(orderid);
		json.setParams_key(DataSafeUtil.getIdentifyKey(json.getParamsString(),
				YTAppService.clientKey));

		return json.buildParams();

	}

	/**
	 * 查询订单信息
	 * 
	 * @param orderid
	 * @param user_token
	 * @param callback
	 *            借口回调 类型是 NetCallBack
	 * @param ctx
	 *            上下文
	 * @return void(采取接口回调，一般会开线程，用接口回调处理异步)
	 */
	public static void queryOrder(String user_token, String orderid,
			final Context ctx, final NetCallBack callback) {
		String jasonStr = "";
		jasonStr = getQueryParamsObjs(user_token, orderid).toString();
		new NetTask() {

			protected void onPostExecute(String result) {
				Util.netResponseCommHandler(1, result, callback);
			};
		}.execute(ctx, Constant.URL_QUERY_ORDER, jasonStr, true, true, true,
				true);
	}

	/**
	 * 查询订单信息
	 * 
	 * @param orderid
	 * @param charge_money
	 * @param ctx
	 *            上下文
	 * @return void(采取接口回调，一般会开线程，用接口回调处理异步)
	 */
	public static void queryOrder(String orderid, final double charge_money,
			final Activity atx) {
		DialogUtil.showDialog(atx, "等待后台处理...");
		PayUtil.queryOrder(YTAppService.userinfo.user_token, orderid, atx,
				new NetCallBack() {

					@Override
					public void onInitSuccess(ResultCode result) {
						String data = result.data;
						JSONObject o;
						if (!TextUtils.isEmpty(data)) {
							try {
								o = new JSONObject(data);
								String orderJson = o.getString("a");// 暂时定为b字段
								String status = new JSONObject(orderJson)
										.getString("status");
								if ("2".equals(status)) {
									Util.onPayReqSuc("支付成功", charge_money, atx);
								} else {
									Util.onPayReqFail("支付失败", charge_money, atx);
								}
							} catch (JSONException e) {
								Util.onPayReqFail("获取订单信息失败", charge_money, atx);
								e.printStackTrace();
							}
						} else {
							Util.onPayReqFail("获取订单信息失败", charge_money, atx);
						}
					}

					@Override
					public void onInitFail(ResultCode result) {
						Util.onPayReqFail("获取订单信息失败", charge_money, atx);
					}
				});
	}
}
